// promise的产生
// 1，多个异步请求,希望同步最终结果,可以用Promise.all
// 2.链式异步请求的问题 ,用上一次异步请求的输出作为下一次的输入，promise的链式调用可以解决这个问题，同时也解决回调地狱，便于维护
// 3.缺点 : 还是基于回调 并且不能中止
// 4.promise 有三个状态 : 成功态（resolve）失败态（reject）等待态（pedding）
// 5.promise 默认执行器立即执行
// 6.promise的实例都拥有一个then方法，参数有两个，一个是成功的回调，一个是失败的回调
// 7.如果执行函数时发生异常，也会执行失败逻辑
// 8.如果promise成功了就不能失败，反之一样
// 9.promise就是一个类
// 10.只有pedding才可以改变状态
// let Promise = require('./Promise')
// const  promise = new Promise((resolve,reject)=>{
//     // throw new Error('出错了')
//     // resolve('成功了')
//     // reject('失败了')
//     setTimeout(()=>{
//         resolve('成功了')
//         // reject('失败了')
//     },1000)
// })

// promise.then((data)=>{
//     console.log('success',data);
// },err=>{
//     console.log('failed',err);
// })

// promise.then((data)=>{
//     console.log('success',data);
// },err=>{
//     console.log('failed',err);
// })

let Promise = require('./Promise')
const p1 = new Promise((resolve,reject)=>{
    // throw err
    resolve(1000)
    // reject(2000)
})
p1.then().then().then()
const p2 = p1.then(function fn1(data){
    console.log(data);
    return new Promise((resolve,reject)=>{
        resolve(111)
    })
},err=>{
    console.log(err,44,'err');
    return err
})
// console.log(p2,'p2');
const p3 = p2.then((data)=>{
    console.log(51,data);
    return p2
},err=>{
    console.log(46);
    console.log(err);
})

